#include<stdio.h>

//删除数组中指定的数字
//1.挪动数据
//2.遇到那个数字不打印--取巧
// int main()
// {
//     int n = 0;
//     scanf("%d",&n);//数组的大小

//     int arr[n];//变长数组
//     for(int i = 0;i<n;++i)
//     {
//         scanf("%d",&arr[i]);//输入数据
//     }

//     int num = 0;
//     scanf("%d",&num);//需要删除的元素

//     for(int i = 0;i<n;++i)
//     {
//         if(arr[i] == num )
//         {
//             continue;
//         }
//         printf("%d ",arr[i]);
//     }
//     printf("\n");
//     return 0;
// }

//3.快慢指针法 -- 似乎可以这么说
// int main()
// {
//     int n = 0;
//     scanf("%d",&n);//数组的大小

//     int arr[n];//变长数组
//     for(int i = 0;i<n;++i)
//     {
//         scanf("%d",&arr[i]);//输入数据
//     }

//     int num = 0;
//     scanf("%d",&num);//需要删除的元素

//     int j = 0;//i和j配合，在维持O(1)的时间复杂度的情况下，完成指定数据的删除

//     //删除数据
//     for(int i = 0;i<n;++i)
//     {
//         if(arr[i] != num)
//         {
//             arr[j++] = arr[i];//如果i指向的元素不是num，就直接覆盖
//         }
//         //如果是num，i++，j不动
//     }

//     //打印数据
//     //j最后执行的位置的下标 -- 就是需要打印的数组元素个数
//     for(int i = 0;i<j;++i)
//     {
//         printf("%d ",arr[i]);
//     }

//     printf("\n");
//     return 0;
// }

//感觉跟leetcode的环境一样

//进制转换，将一个数转换成n进制
// void trans_num(int m,int n)
// {
//     if(m > n-1)//如果是n进制下的二位数
//     {
//         trans_num(m/n,n);//将个位与数字拆分开
//     }

//     printf("%d",m%n);
    
// }

// int main()
// {
//     int m = 0,n = 0;
//     printf("请输入数字m和进制n\n");
//     scanf("%d %d",&m,&n);

//     trans_num(m,n);
//     return 0;
// }

//gcc环境下char也是有符号的char
// int main()
// {
//     char a = -1;
//     printf("%d\n",a);
//     return 0;
// }

//矩阵计算--只使用一个变量读取
// int main()
// {
//     int row = 0,col = 0;
//     scanf("%d %d",&row,&col);
//     int tmp = 0;
//     int sum = 0;

//     for(int i = 0;i< row; ++i)
//     {
//         for(int j = 0; j < col; ++j)
//         {
//             scanf("%d",&tmp);
//             if(tmp > 0)
//             {
//                 sum += tmp;
//             }
//         }
//     }
//     printf("%d",sum);    
//     return 0;
// }

//设计一个函数统计二进制下1的个数
int Numberof1(int n)
{
    int count = 0;
    while(n)
    {
        ++count;
        n = n&(n-1);
    }
    return count;
}

//两个数中二进制中的不同数位
// int main()
// {
//     int m = 0,n = 0;
//     scanf("%d %d",&m,&n);

//     int tmp = m^n;//相同为0，相异为1
//     printf("%d\n",Numberof1(tmp));
//     return 0;
// }

//判断一个数是否是2的k次方--二进制下只有一个1
// int main()
// {
//     int n = 0;
//     scanf("%d",&n);

//     if( (n & (n-1)) == 0)
//     {
//         printf("是2的k次方\n");
//     }
//     else 
//     {
//         printf("不是\n");
//     }

//     return 0;
// }

// int main()
// { 
//     printf("hello world\n");
//     return 0;
// }